<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2010 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: luofei614 <www.3g4k.com>
// +----------------------------------------------------------------------
// $Id: SaeKV.class.php 177 2012-05-07 02:37:04Z luofei614@126.com $
/**
 *KVDB模拟器
 *使用到数据库表think_sae_kv
 */
class SaeKV extends SaeObject{

	public function delete($key){
		$ret=self::$db->runSql("delete from sae_kv where k='$key'");
		return $ret?true:false;
	}

	public function get($key){
		$data=self::$db->getLine("select * from sae_kv where k='$key'");
		$value=$this->output(array($data));
		$ret=$value[$key];
		return $ret?$ret:false;
	}
	public function get_info(){
		//todu
	}
	public function init(){
		return true;
	}
	public function mget($ary){
		if(empty($ary)) return null;
		array_walk($ary,function(&$r){
			$r="'$r'";
		});
		$where=implode(',', $ary);
		$data=self::$db->getData("select * from sae_kv where k in($where)");
		return $this->output($data);
	}
	public function pkrget($prefix_key,$count,$start_key){
		//todu
	}
	public function set($key,$value){
		if(!is_string($value)){
			//如果不是字符串序列化
			$value=serialize($value);
			$isobj=1;
		}else{
			$isobj=0;
		}
		//判断是否存在键
		if(self::$db->getVar("select count(*) from sae_kv where k='$key'")>0){
			$ret=self::$db->runSql("update sae_kv set v='$value',isobj='$isobj' where k='$key'");
		}else{
			$ret=self::$db->runSql("insert into sae_kv(k,v,isobj) values('$key','$value','$isobj')");
		}
		return $ret?true:false;
	}

	private function output($arr){
		$ret=array();
		foreach($arr as $k=>$ary){
			$ret[$ary['k']]=$ary['isobj']?unserialize($ary['v']):$ary['v'];
		}
		return $ret;
	}

}


?>